package solitariocontinental;

import aima.search.framework.HeuristicFunction;

public class SolitarioContinentalHeuristicFunction implements HeuristicFunction{

	@Override
	public double getHeuristicValue(Object state) {
		SolitarioContinentalEstado estado = (SolitarioContinentalEstado) state;
		
		int h = 30;
		
		int[] casillasPorZona = new int[5];
		
		for (int i=0; i < SolitarioContinentalEstado.LADO; i++)
			for (int j=0; j < SolitarioContinentalEstado.LADO; j++)
				if (i < 3 && j > 1 && j < 5 && estado.getCasilla(i, j) == SolitarioContinentalEstado.OCUPADO)
					casillasPorZona[0]++;
				else if (i > 1 && i < 5 && j > 4 && estado.getCasilla(i, j) == SolitarioContinentalEstado.OCUPADO)
					casillasPorZona[1]++;
				else if (i > 4 && j > 1 && j < 5 && estado.getCasilla(i, j) == SolitarioContinentalEstado.OCUPADO)
					casillasPorZona[2]++;
				else if (i > 1 && i < 5 && j < 2 && estado.getCasilla(i, j) == SolitarioContinentalEstado.OCUPADO)
					casillasPorZona[3]++;
				else if (estado.getCasilla(i, j) == SolitarioContinentalEstado.OCUPADO)
					casillasPorZona[4]++;
		
		if (casillasPorZona[0] > 4 && casillasPorZona[4] > 5)
			h -= 3;
		if (casillasPorZona[1] > 4 && casillasPorZona[4] > 5)
			h -= 3;
		if (casillasPorZona[2] > 4 && casillasPorZona[4] > 5)
			h -= 3;
		if (casillasPorZona[3] > 4 && casillasPorZona[4] > 5)
			h -= 3;
		
		if (estado.getCasillasOcupadas() < 20)
			h -= (20 - estado.getCasillasOcupadas());
		
		return h;
	}

}
